package com.swanclouds.model.systems;

import com.swanclouds.model.DeviceEntity;
import com.swanclouds.model.ModelEntity;
import com.swanclouds.redfish.systems.domain.StorageModel;

import java.util.List;

/**
 * 存储控制器
 *
 * @author 张立强 
 */
public interface Storage extends DeviceEntity {

    /**
     * 存储控制器个数
     * @return getStorageControllersCount
     */
    Integer getStorageControllersCount();

    /**
     * 存储控制器列表
     * @return getStorageController
     */
    List<StorageController> getStorageController();

    /**
     * 存储控制器管理的驱动器个数
     * @return getDrivesCount
     */
    Integer getDrivesCount();

    /**
     * 定控制器管理的驱动器列表
     * @return getDrives
     */
    List<String> getDrives();

    /**
     * 存储控制器管理的逻辑盘集合资源个数
     * @return getVolumesCount
     */
    Integer getVolumesCount();

    /**
     * 控制器管理的逻辑盘集合资源
     * @return getVolumes
     */
    List<String> getVolumes();

    public static interface StorageController extends ModelEntity {

        /**
         * 控制器标识
         * @return getMemberId
         */
        Integer getMemberId();

        /**
         * 存储控制器的访问路径
         * @return getDataId
         */
        String getDataId();

        /**
         * 存储控制器的描述信息
         * @return getDescription
         */
        String getDescription();

        /**
         * 存储控制器的名称
         * @return getName
         */
        String getName();

        /**
         * 存储控制器的状态
         * @return getStatus
         */
        Status getStatus();

        /**
         * 存储控制器序列号
         * @return getSerialNumber
         */
        String getSerialNumber();

        /**
         * 存储控制器的接口速率
         * @return getSpeedGbps
         */
        Integer getSpeedGbps();

        /**
         * 存储控制器的固件版本
         * @return getFirmwarePackageVersion
         */
        String getFirmwarePackageVersion();

        /**
         * 存储控制器支持的协议类型
         * @return getSupportedDeviceProtocols
         */
        List<String> getSupportedDeviceProtocols();

        /**
         * 存储控制器生产厂商
         * @return getManufacturer
         */
        String getManufacturer();

        /**
         * 存储控制器型号
         * @return getModel
         */
        String getModel();

        /**
         * 存储控制器自定义参数
         * @return java.util.Map
         */
        StorageModel.StorageControllerModel.Oem getOem();

        interface Status extends ModelEntity {

            /**
             * 存储控制器使能状态
             *
             * @return getState
             */
            String getState();

            /**
             * 存储控制器健康状态
             *
             * @return getHealth
             */
            String getHealth();
        }
    }
}
